package com.smarthome.api.mobile.service;

/**
 * 小区开门命令。
 * 
 * @author KongXiangyu
 * @since 1.0
 */
// @org.springframework.stereotype.Service("mobile.residence.door.open")
// public class MobileResidenceDoorOpenService implements Service<MobileResponse<?>> {// MobileResidenceDoorOpenRequest
//
// @Resource
// private EquipmentCommLogService equipmentCommLogService;
//
// @Resource
// private EquipmentInfoService equipmentInfoService; // 设备基础信息service
//
// @Resource
// private IpcServerCommandUtil ipcServerCommandUtil; // service
//
// // @Resource
// // private AccountLogService accountLogService;//用户操作日志
//
// /**
// * 终端设备指令控制方法
// */
// public void execute(MobileResidenceDoorOpenRequest request, MobileResponse<?> response) {
// boolean isLogin = APIUtil.isLogin(request);
// if (!isLogin) { // 未获得用户token信息
// response.setMobileCodeObj(MobileCodeEnum.ACCOUNT_LOGIN_NEED);
// return;
// }
// Long user_id = request.getAccountId(); // 用户id
// Long residenceId = request.getAccount().getResidenceId(); // 小区id
// if (user_id == null) {
// MobileCodeEnum.DEVICE_MSG.getCustomEnum("未得到用户信息");
// return;
// }
// if (residenceId == null) {
// MobileCodeEnum.DEVICE_MSG.getCustomEnum("未得到登录用户所属小区");
// return;
// }
// Long deviceId = request.getDeviceId(); // 设备id
// String comm_type = request.getCommType(); // 操作类型，对应EquipmentCommTypeEnum.java枚举类 doType ：通信类型1：开门；2：关门；3：可视对讲；4：视频预览；5：视频历史
// String command = request.getCommand(); // 控制指令
// Map<String, Object> re_map = new HashMap<String, Object>();
// try {
// if (deviceId == null) {
// response.setMobileCodeObj(MobileCodeEnum.DEVICE_MSG.getCustomEnum("未查询到要操作的设备"));
// return;
// }
// if (comm_type == null) {
// response.setMobileCodeObj(MobileCodeEnum.DEVICE_MSG.getCustomEnum("未得到操作类型"));
// return;
// }
//
// // 通过设备id，得到设备相关信息
// /*
// * ShEquipmentInfo equipmentInfo = equipmentInfoService.queryShEquipmentInfoById(deviceId); //通过父节点设备id，得到相关的设备信息 List<ShEquipmentInfo> List =
// * equipmentInfoService.queryShEquipmentInfoListByParentId("13");
// */
//
// // 通过设备id，得到设备相关信息
// ShEquipmentInfo equipmentInfo = equipmentInfoService.queryShEquipmentAllInfoById(deviceId);
// if (equipmentInfo != null) {
// String ipcId = ""; // 工控机设备的mac地址
// if (equipmentInfo.getIsMaindev() != null && equipmentInfo.getIsMaindev().equals("2")) { // 如果是子设备
// ShEquipmentInfo equipmentInfo2 = equipmentInfoService.queryShEquipmentInfoById(Long.valueOf(equipmentInfo.getParentDevId()));// 得到工控机(主设备)的mac地址
// if (equipmentInfo2 != null && equipmentInfo2.getDeviceMac() != null) {
// ipcId = equipmentInfo2.getDeviceMac();
// } else {
// response.setMobileCodeObj(MobileCodeEnum.DEVICE_NO_MAIN);
// return;
// }
// } else {
// ipcId = equipmentInfo.getDeviceMac();
// }
// // 通过工控机mac地址，得到session值
// /*
// * IoSession session = ipcServerHandler.getSessions().get(ApiCachedKeysUtil.getKey(ApiCachedKeysUtil.MODULE_IPC_SESSION, String.valueOf(ipcId))); if (session == null) {
// * response.setMobileCodeObj(MobileCodeEnum.DEVICE_NO_SESSION); return; }
// */
//
// // 执行设备控制操作
// if (equipmentInfo.getEquipmentTypeCode() != null) {// 判断设备类型
//
// // 摆闸
// if (equipmentInfo.getEquipmentTypeCode().equals(EquipmentTypeEnum.DEV_SWING.getCode())) {
// re_map = doBaiZha(ipcId, command, comm_type, equipmentInfo);
// // boolean flag = (boolean) re_map.get("flag");
// // if ((flag)) {// 成功
// // response.setMobileCodeObj(MobileCodeEnum.DEVICE_SUCCESS_DO);
// // return;
// // } else {// 失败
// // response.setMobileCodeObj(MobileCodeEnum.DEVICE_FAIL_DO);
// return;
// // }
// }
//
// // 门禁
// if (equipmentInfo.getEquipmentTypeCode().equals(EquipmentTypeEnum.DEV_TALK.getCode())) {
// re_map = doMenJin(ipcId, command, comm_type, equipmentInfo);
// boolean flag = (boolean) re_map.get("flag");
// if ((flag)) {// 成功
// response.setMobileCodeObj(MobileCodeEnum.DEVICE_SUCCESS_DO);
// return;
// } else {// 失败
// // response.setMobileCodeObj(MobileCodeEnum.DEVICE_FAIL_DO);
//
// String msg = re_map.get("msg").toString();
//
// response.setMobileCodeObj(MobileCodeEnum.DEVICE_MSG.getCustomEnum(msg));
// return;
// }
// }
//
// // 门口机
// if (equipmentInfo.getEquipmentTypeCode().equals(EquipmentTypeEnum.DEV_TALK.getCode())) {
// doMenKouJi(ipcId, command, comm_type, equipmentInfo);
// }
//
// // 监控
// if (equipmentInfo.getEquipmentTypeCode().equals(EquipmentTypeEnum.DEV_CAMERA.getCode())) {
// dojianKong(ipcId, command, comm_type, equipmentInfo);
// }
// } else {// 未查询到设备类型
// response.setMobileCodeObj(MobileCodeEnum.DEVICE_NO_CODE);
// return;
// }
// } else {
// response.setMobileCodeObj(MobileCodeEnum.DEVICE_NO_INFO);
// return;
// }
// } catch (Exception e) {
// e.printStackTrace();
// response.setMobileCodeObj(MobileCodeEnum.SYSTEM_ERROR);
// return;
// }
// }
//
// /**
// * 门禁的操作 doType 操作类型，对应EquipmentCommTypeEnum.java枚举类 command 控制指令
// */
// private Map<String, Object> doMenJin(String ipcId, String command, String doType, ShEquipmentInfo equipmentInfo) {
// Map<String, Object> map = new HashMap<String, Object>();
// if (StringUtils.isBlank(doType)) {
// map.put("flag", false);
// map.put("msg", "无法得到操作类型");
// return map;
// }
//
// if (equipmentInfo.getEquipmentProCode() != null) {
// // 奥普--公司设备
// if (equipmentInfo.getEquipmentProCode().toString().equals(EquipmentProduEnum.DEV_PRO_AOPU.getCode())) {
// map.put("flag", false);
// map.put("msg", "公司:" + EquipmentProduEnum.DEV_PRO_AOPU.getName() + " 未在系统注册【门禁】设备， 该设备" + equipmentInfo.getName() + "与所属供应商不匹配。");
// return map;
// }
//
// // 海康--公司设备
// if (equipmentInfo.getEquipmentProCode() != null && equipmentInfo.getEquipmentProCode().toString().equals(EquipmentProduEnum.DEV_PRO_HK.getCode())) {
//
// // 海康开门
// HkIpcResidenceDoorOpRequest request = new HkIpcResidenceDoorOpRequest();
// request.setDeviceId(equipmentInfo.getSelfCode());// 序列号
// request.setIp(equipmentInfo.getDeviceIp());
// request.setCommand(IpcConstants.IPC_COMMAND_RESIDENCE_DOOR_HK);
// JSONObject obj = ipcServerCommandUtil.sendCommand(ipcId, request); // 执行相关操作
// if (obj != null) {
// return obj;
// } else {
// map.put("flag", false);
// map.put("msg", "操作失败");
// return map;
// }
//
// }
//
// // 欧伯特--公司设备
// if (equipmentInfo.getProduerId() != null && equipmentInfo.getProduerId().toString().equals(EquipmentProduEnum.DEV_PRO_OBT.getCode())) {
// map.put("flag", false);
// map.put("msg", "公司:" + EquipmentProduEnum.DEV_PRO_OBT.getName() + " 未在系统注册【门禁】设备， 该设备" + equipmentInfo.getName() + "与所属供应商不匹配。");
// return map;
// }
//
// map.put("flag", true);
// map.put("msg", "操作成功");
// return map;
// } else {
// map.put("flag", false);
// map.put("msg", "无法得到设备所属公司");
// return map;
// }
// }
//
// /**
// * 摆闸的操作 doType 操作类型，对应EquipmentCommTypeEnum.java枚举类 command 控制指令
// * @param equipmentInfo
// * @author SZC
// */
// private Map<String, Object> doBaiZha(String ipcId, String command, String doType, ShEquipmentInfo equipmentInfo) throws Exception {
// Map<String, Object> map = new HashMap<String, Object>();
// if (StringUtils.isBlank(doType)) {
// map.put("flag", false);
// map.put("msg", "无法得到操作类型");
// return map;
// }
// if (equipmentInfo.getEquipmentProCode() != null) {
//
// // 奥普--公司设备 //IpcLogRecordRequest requestss = new IpcLogRecordRequest();
// if (equipmentInfo.getEquipmentProCode().toString().equals(EquipmentProduEnum.DEV_PRO_AOPU.getCode())) {
// // 摆闸开门/关门
// if (doType.equals(EquipmentCommTypeEnum.DO_TYPE_KM.getId()) || doType.equals(EquipmentCommTypeEnum.DO_TYPE_GM.getId())) {
// // 奥普开门
// // IpcResidenceDoorRequest request = new IpcResidenceDoorRequest();
// // request.setCommand(command);
// // request.setDeviceId(equipmentInfo.getSelfCode());
// // request.setCommand(IpcConstants.IPC_COMMAND_RESIDENCE_DOOR_OPEN_AOPU);
// // JSONObject obj = ipcServerCommandUtil.sendCommand(ipcId, request);// 执行相关操作
// ClientSend.doCommand(ClientSend.COMMAND_DOOR_OPEN);
// // 存入通信表日志
// // if (obj.containsKey("code") && obj.containsKey("msg")) {
// // if (IpcCodeEnum.SYSTEM_SUCCESS.getCode().equals(obj.getString("code"))) {
// map.put("flag", true);
// map.put("msg", "操作成功");
// // } else {
// // map.put("flag", false);
// // map.put("msg", obj.getString("msg"));
// // }
// // } else {
// // map.put("flag", false);
// // map.put("msg", "操作失败");
// // }
// return map;
// } else {
// map.put("flag", false);
// map.put("msg", "无法得到操作类型");
// return map;
// }
// }
//
// // 海康--公司设备
// if (equipmentInfo.getProduerId() != null && equipmentInfo.getProduerId().toString().equals(EquipmentProduEnum.DEV_PRO_HK.getCode())) {
//
// map.put("flag", false);
// map.put("msg", "公司:" + EquipmentProduEnum.DEV_PRO_HK.getName() + " 未在系统注册【摆闸】设备， 该设备" + equipmentInfo.getName() + "与所属供应商不匹配。");
// return map;
// }
//
// // 欧伯特--公司设备
// if (equipmentInfo.getProduerId() != null && equipmentInfo.getProduerId().toString().equals(EquipmentProduEnum.DEV_PRO_OBT.getCode())) {
// map.put("flag", false);
// map.put("msg", "公司:" + EquipmentProduEnum.DEV_PRO_OBT.getName() + " 未在系统注册【摆闸】设备， 该设备" + equipmentInfo.getName() + "与所属供应商不匹配。");
// return map;
// }
//
// map.put("flag", true);
// map.put("msg", "操作成功");
// return map;
// } else {
//
// map.put("flag", false);
// map.put("msg", "无法得到设备所属公司");
// return map;
// }
// }
//
// /**
// * 门口机的操作 doType 操作类型，对应EquipmentCommTypeEnum.java枚举类 command 控制指令
// */
// private Map<String, Object> doMenKouJi(String ipcId, String command, String doType, ShEquipmentInfo equipmentInfo) throws Exception {
// Map<String, Object> map = new HashMap<String, Object>();
// if (StringUtils.isBlank(doType)) {
// map.put("flag", false);
// map.put("msg", "无法得到操作类型");
// return map;
// }
//
// if (equipmentInfo.getEquipmentProCode() != null) {
// JSONObject obj = new JSONObject();
// // 海康--公司设备
// if (equipmentInfo.getEquipmentProCode().toString().equals(EquipmentProduEnum.DEV_PRO_HK.getCode())) {
// // 开/关门
// if (doType.equals(EquipmentCommTypeEnum.DO_TYPE_KM.getId()) || doType.equals(EquipmentCommTypeEnum.DO_TYPE_GM.getId())) {
// IpcResidenceDoorRequest req = new IpcResidenceDoorRequest();
// req.setCommand(IpcConstants.IPC_COMMAND_RESIDENCE_DOOR_HK); // 海康--门禁开门模块
// req.setIpcId(ipcId);
// req.setIp(equipmentInfo.getDeviceIp());
// req.setDeviceId(equipmentInfo.getId().toString());
// obj = ipcServerCommandUtil.sendCommand(ipcId, req);// 执行相关操作
// }
// // 可视对讲
// if (doType.equals(EquipmentCommTypeEnum.DO_TYPE_KSDJ)) {
// HkIpcResidenceTalkDoorRequest req = new HkIpcResidenceTalkDoorRequest();
// req.setCommand(IpcConstants.IPC_COMMAND_RESIDENCE_DOOR_TALK_HK); // 海康--可视对讲
// req.setIpcId(ipcId);
// req.setDeviceId(equipmentInfo.getId().toString());
// obj = ipcServerCommandUtil.sendCommand(ipcId, req);// 执行相关操作
// }
// }
// if (obj.containsKey("code") && obj.containsKey("msg")) {
// if (IpcCodeEnum.SYSTEM_SUCCESS.getCode().equals(obj.getString("code"))) {
// map.put("flag", true);
// map.put("msg", "操作成功");
// } else {
// map.put("flag", false);
// map.put("msg", obj.getString("msg"));
// }
// } else {
// map.put("flag", false);
// map.put("msg", "操作失败");
// }
// return map;
// } else {
// map.put("flag", false);
// map.put("msg", "无法得到设备所属公司");
// return map;
// }
// }
//
// /**
// * 监控的操作 doType 操作类型，对应EquipmentCommTypeEnum.java枚举类 command 控制指令
// * @see 视频预览、视频历史查看
// *
// */
// private Map<String, Object> dojianKong(String ipcId, String command, String doType, ShEquipmentInfo equipmentInfo) {
// Map<String, Object> map = new HashMap<String, Object>();
// if (StringUtils.isBlank(doType)) {
// map.put("flag", false);
// map.put("msg", "无法得到操作类型");
// return map;
// }
//
// if (equipmentInfo.getEquipmentProCode() != null) {
// // 海康--公司设备
// JSONObject obj = new JSONObject();
// if (equipmentInfo.getEquipmentProCode().toString().equals(EquipmentProduEnum.DEV_PRO_HK.getCode())) {
// // 视频预览
// if (doType.equals(EquipmentCommTypeEnum.DO_TYPE_SPYL.getId())) {
// HkIpcResidenceVideoDoorRequest req = new HkIpcResidenceVideoDoorRequest();
// req.setCommand(IpcConstants.IPC_COMMAND_RESIDENCE_DOOR_VIDEO_HK); // 海康--视频预览--模块
// req.setIpcId(ipcId);
// req.setDeviceId(equipmentInfo.getId().toString());
// obj = ipcServerCommandUtil.sendCommand(ipcId, req);// 执行相关操作
// }
// // 视频历史
// if (doType.equals(EquipmentCommTypeEnum.DO_TYPE_SPLS.getId())) {
// HkIpcResidenceVideoDoorRequest req = new HkIpcResidenceVideoDoorRequest();
// req.setCommand(IpcConstants.IPC_COMMAND_RESIDENCE_DOOR_VIDEO_HISTORY_HK); // 海康--视频历史
// req.setIpcId(ipcId);
// req.setDeviceId(equipmentInfo.getId().toString());
// obj = ipcServerCommandUtil.sendCommand(ipcId, req);// 执行相关操作
// }
// }
// if (obj.containsKey("code") && obj.containsKey("msg")) {
// if (IpcCodeEnum.SYSTEM_SUCCESS.getCode().equals(obj.getString("code"))) {
// map.put("flag", true);
// map.put("msg", "操作成功");
// } else {
// map.put("flag", false);
// map.put("msg", obj.getString("msg"));
// }
// } else {
// map.put("flag", false);
// map.put("msg", "操作失败");
// }
// return map;
// } else {
//
// map.put("flag", false);
// map.put("msg", "无法得到设备所属公司");
// return map;
// }
// }
//
// }
